{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "cc7d6f0f",
   "metadata": {},
   "source": [
    "In this notebook, we show how to implement various loss functions using PyTorch. Refer to section 9.1 for more details around the theory."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "46649acc",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e6ce38bc",
   "metadata": {},
   "source": [
    "# Regression Loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "852354ef",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss = 11.844199180603027\n"
     ]
    }
   ],
   "source": [
    "from torch.nn.functional import mse_loss\n",
    "\n",
    "y = torch.tensor([-0.10, -0.24,  1.43, -0.14, -0.59])\n",
    "y_gt = torch.tensor([0.59, -1.92, -1.27, -0.40,  0.50])\n",
    "\n",
    "loss = mse_loss(y, y_gt, reduction='sum')\n",
    "print('Loss = {}'.format(loss))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "393d8798",
   "metadata": {},
   "source": [
    "## Cross Entropy Loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "23f289cf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss = 0.2231435328722\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "\n",
    "y = torch.tensor([0.8, 0.15, 0.04, 0.01])\n",
    "y_gt = torch.tensor([1., 0., 0., 0.])\n",
    "\n",
    "loss = -1 * torch.dot(y_gt, torch.log(y))\n",
    "\n",
    "print(\"Loss = {}\".format(loss))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4a4d486e",
   "metadata": {},
   "source": [
    "## Binary Cross Entropy Loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "bba823b5",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss = 0.2231435328722\n"
     ]
    }
   ],
   "source": [
    "from torch.nn.functional import binary_cross_entropy\n",
    "# It is sufficient to just take y0 because y1 = 1 - y0 in the 2 class example\n",
    "y = torch.tensor([0.8])\n",
    "y_gt = torch.tensor([1.])\n",
    "loss = binary_cross_entropy(y, y_gt)\n",
    "print(\"Loss = {}\".format(loss))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e1e7939e",
   "metadata": {},
   "source": [
    "## Softmax"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c992a639",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Softmax output = tensor([4.9749e-01, 5.0249e-01, 2.3042e-05, 1.0357e-09])\n"
     ]
    }
   ],
   "source": [
    "from torch.nn.functional import softmax\n",
    "logits = torch.tensor([9.99, 10, 0.01, -10])\n",
    "output = softmax(logits, dim=0)\n",
    "\n",
    "print(\"Softmax output = {}\".format(output))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8195f3c5",
   "metadata": {},
   "source": [
    "## Softmax Cross Entropy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b062ae25",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss = 0.6881826519966125\n"
     ]
    }
   ],
   "source": [
    "from torch.nn.functional import cross_entropy\n",
    "logits = torch.tensor([[9.99, 10, 0.01, -10]])\n",
    "y_gt = torch.tensor([1])\n",
    "loss = cross_entropy(logits, y_gt)\n",
    "\n",
    "print(\"Loss = {}\".format(loss))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d448e895",
   "metadata": {},
   "source": [
    "##  Focal Loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "dcda376b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "gamma=0, loss = tensor([0.2231])\n",
      "gamma=1, loss = tensor([0.0446])\n",
      "gamma=1, loss = tensor([0.0089])\n"
     ]
    }
   ],
   "source": [
    "def focal_loss(y, y_gt, gamma):\n",
    "    y_t = (y_gt * y) + ((1 - y_gt) * (1 - y))\n",
    "    loss = -1 * torch.pow((1 - y_t), gamma) * torch.log(y_t)\n",
    "    return loss\n",
    "    \n",
    "y = torch.tensor([0.8])\n",
    "y_gt = torch.tensor([1.])\n",
    "loss_0 = focal_loss(y, y_gt, 0)\n",
    "loss_1 = focal_loss(y, y_gt, 1)\n",
    "loss_2 = focal_loss(y, y_gt, 2)\n",
    "print(\"gamma=0, loss = {}\".format(loss_0))\n",
    "print(\"gamma=1, loss = {}\".format(loss_1))\n",
    "print(\"gamma=1, loss = {}\".format(loss_2))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "947363c7",
   "metadata": {},
   "source": [
    "## Plot Focal Loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "a784924c",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/sujaynarumanchi/.virtualenvs/book_test_pyt113/lib/python3.8/site-packages/numpy/core/shape_base.py:65: FutureWarning: The input object of type 'Tensor' is an array-like implementing one of the corresponding protocols (`__array__`, `__array_interface__` or `__array_struct__`); but not a sequence (or 0-D). In the future, this object will be coerced as if it was first converted using `np.array(obj)`. To retain the old behaviour, you have to either modify the type 'Tensor', or assign to an empty array created with `np.empty(correct_shape, dtype=object)`.\n",
      "  ary = asanyarray(ary)\n",
      "/Users/sujaynarumanchi/.virtualenvs/book_test_pyt113/lib/python3.8/site-packages/numpy/core/shape_base.py:65: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n",
      "  ary = asanyarray(ary)\n",
      "/Users/sujaynarumanchi/.virtualenvs/book_test_pyt113/lib/python3.8/site-packages/numpy/core/shape_base.py:65: FutureWarning: The input object of type 'Tensor' is an array-like implementing one of the corresponding protocols (`__array__`, `__array_interface__` or `__array_struct__`); but not a sequence (or 0-D). In the future, this object will be coerced as if it was first converted using `np.array(obj)`. To retain the old behaviour, you have to either modify the type 'Tensor', or assign to an empty array created with `np.empty(correct_shape, dtype=object)`.\n",
      "  ary = asanyarray(ary)\n",
      "/Users/sujaynarumanchi/.virtualenvs/book_test_pyt113/lib/python3.8/site-packages/numpy/core/shape_base.py:65: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n",
      "  ary = asanyarray(ary)\n",
      "/Users/sujaynarumanchi/.virtualenvs/book_test_pyt113/lib/python3.8/site-packages/numpy/core/shape_base.py:65: FutureWarning: The input object of type 'Tensor' is an array-like implementing one of the corresponding protocols (`__array__`, `__array_interface__` or `__array_struct__`); but not a sequence (or 0-D). In the future, this object will be coerced as if it was first converted using `np.array(obj)`. To retain the old behaviour, you have to either modify the type 'Tensor', or assign to an empty array created with `np.empty(correct_shape, dtype=object)`.\n",
      "  ary = asanyarray(ary)\n",
      "/Users/sujaynarumanchi/.virtualenvs/book_test_pyt113/lib/python3.8/site-packages/numpy/core/shape_base.py:65: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n",
      "  ary = asanyarray(ary)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqsAAAIsCAYAAADVruCRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAgAElEQVR4nOzdeXxU1f3/8dedJftCEsISkrAnbArIIggiICKgKCq4tiIurRWsVq3f4qNa9atg9Vt/trViS13rAnXBDdEqCFRk38O+BRIgJISQfZ/7+2PIkEASkkySmWTez8djHiT3nrn3M/cSeXty7jmGaZomIiIiIiJeyOLpAkREREREaqKwKiIiIiJeS2FVRERERLyWwqqIiIiIeC2FVRERERHxWgqrIiIiIuK1FFZFRERExGsprIqIiIiI11JYFRERERGvpbAqIiIiIl5LYVVEREREvJbCqrRaXbp0wTCMWl+vvPKKp8uss4rPk5yc3KTv8VZffvkll19+OWFhYa77t3z5ck+X5VVa0/1ubrp2Z+lnTbyNzdMFiDS1ESNG0KNHj2r39enTp5mrkYbYsmULN910Ew6Hg7Fjx9KxY0cMw6BDhw6eLk2kVdHPmngjhVVp9e69917uuusuT5chbvjss88oLS3liSee4Pnnn/d0OV5r6dKllJaW0qlTJ0+XIi2UftbEGymsiojXO3LkCAA9e/b0cCXerXv37p4uQVo4/ayJN9KYVZFKUlNTefDBB+nZsycBAQGEh4czYsQI/v73v1NeXl7j+woKCnjllVcYOXIkERER+Pv707lzZyZPnswHH3xQpe26det4/PHHGTp0KB06dMDPz4/27dszefJkvv/++6b+iC4N+az79u3j7rvvpmvXrvj7+xMSEkLnzp255ppreOuttxrctiZPP/00hmG42s+YMcM1hm706NFuf56KYwG89dZbDB8+nPDw8AuOXdy9ezeGYRAREUFRUVGN7QYPHoxhGHz++eeubQ29/3WptbZxl/W5PsnJyRiGQZcuXWqsp7ZzuXvvPXF9q+PudSgsLORPf/oTw4YNo02bNgQEBJCYmMjjjz9OZmZmtcdrjJ+byup63+vzs1adI0eOYLFYiIuL45///GeN7b766isMw2DgwIGUlZXV+/OIjzJFWqnOnTubgPnWW2/Vqf26devMyMhIEzDj4+PNW265xZwwYYIZEBBgAubVV19tFhcXn/e+I0eOmH369DEBMygoyLzqqqvMW2+91bz88svN8PBws3PnzlXaX3nllabFYjEvuugic9KkSea0adPMSy65xARMwHzllVdq/TyHDh2q9zU49z0N+azbt283w8LCTMBMTEw0b7zxRnPatGnm8OHDzZCQELN///4NalubRYsWmdOnTze7d+9uAuaIESPM6dOnm9OnTzfnzp3r1ucxTdN1zWfNmmVaLBZz5MiR5m233WZeeumlZnJycq21DR8+3ATMDz/8sNr927ZtMwGzffv2ZmlpqWt7Q+9/XWptrPt96NAhEzjv725lNZ2rse59c1/f6j6PO9fh6NGj5kUXXWQCZmRkpDlu3DjzhhtucLXv0qXLeX/HGuvaVajPfa/rz1pNtm3bZk6cONEETKvVaqanp5/XJi8vz4yPjzctFou5bt26en0W8W0Kq9Jq1SesFhUVudrff//9ZklJiWvfgQMHzC5dupiA+cQTT1R5X3l5uTl48GATMMePH3/ef6ALCwvNxYsXV9n29ddfm8eOHTuvhp9++skMCwsz7Xa7mZqaWuPncTesNvSzzpgxwwTM55577rzzFBQUmCtWrGhQ27qYPn16jfeyoZ/HNM8GwLCwMHP16tX1qmn+/Pmuf/Cr85vf/MYEzEcffbTK9obe/7rU2lj3252Q1lj3vrmvb2OGVYfDYY4YMcIEzHvuucfMyclx7SstLTUfffRREzDHjBlT5ViN+XPT0J+L2n7W6mLSpEkmYH755Zfn7XvkkUdMwPz1r3/doGOL71JYlVar4j/UNb2uuOIKV9t//etfJmDGxMSYRUVF5x3r448/NgEzNDTULCwsdG3/7LPPTMDs2LGjmZub63bNs2fPNgHzb3/7W42fx92w2tDPWvGP0KZNmy543vq0rYva/gFt6OcxzbMB8Nlnn613TTk5OWZQUJBpsVjOCz8lJSVmdHS0CZhJSUl1PmZt978utTbW/XYnrDbWvW/u69uYYXXJkiUmYA4YMKBKr2+F8vJys1+/fiZgbt++3bW9MX9uGvpz4W5YnTNnjgmYL7zwQpXtmzZtMq1WqxkbG1slvIvUhR6wklavpqmrevXq5fq6Yg7BW2+9FX9///Pa3njjjURERJCVlcXGjRsZMWIEAN988w0At99+OyEhIXWuKTMzk8WLF5OUlERWVhalpaWAc7wawJ49e+p8rPpq6GcdOnQoX3/9Nb/61a945plnuOKKKwgICKj2HPVp66nPU9nUqVPrfd7Q0FCmTp3Ku+++y7vvvsvs2bNd+xYvXkxGRgZDhw6lb9++573Xnftf31ob4/rUR2Pde09d38awePFiAG666SZstvP/mbVYLIwaNYqkpCR++ukn+vXrBzTuz01z3/cKFdMB7tixw7XN4XDwi1/8gvLycv76178SGhraKOcS36GwKq1eXaauOnr0KABdu3atdr9hGHTt2pWsrCxXW4DDhw8DVYPvhcyfP5/f/OY35Ofn19gmJyenzserr4Z+1t/+9rf8+OOPfP/990yYMAG73U7//v0ZNWoUt956K0OGDGlQW099nspqe4CmNnfffTfvvvsub7/9dpUwVfkhlXO5e//rW2tjXJ/6aMx774nr2xgOHjwIwJNPPsmTTz5Za9uMjAzX14157Zr7vleoLqy++uqrbNiwgSlTpjBlypRGO5f4Ds0GINKMNm7cyC9/+UuKi4v54x//yM6dO8nLy8PhcGCaJn//+98BME3Tw5WeLygoiO+++45169bx7LPPcuWVV7J3715efvllhg4dysyZMxvU1hsEBgY26H2jRo2ie/fu7N27l59++gmA9PR0vv76awICArj11lurtG+M+9/QWhubw+Godntj3ntPXN/6qu46VGwbOXIk06dPr/VVuWe4pf3cVKdbt24EBASwa9cuHA4HR48e5fe//z2hoaH89a9/9XR50kKpZ1UEXJOoV/SIVOfQoUNV2gLEx8cDzql26uKjjz7CNE0efPBBHn/88fP2V/yasik19LNWGDJkiKuHp6ysjM8++4w777yT1157jalTpzJmzJgGtfXU53GHYRjcddddPPnkk7z11ltcdtllvPfee5SVlXHzzTfTpk2bKu09cf8bcn38/PwAyM3NrbZ9aWkpx48fr/W8jXHvPX19G3od4uLiALj++ut57LHH6nVOaJxr56mfC6vVSkJCAtu2bePQoUP89re/JTc3l7/85S/ExsY22nnEt6hnVQRc8wguXLiw2nkdFy1aRFZWFqGhoQwaNMi1fcKECQB8+OGHtf7ascKpU6cA6Ny583n7ioqK+OSTTxpSfr009LNWx2azMXXqVK6++mrAuVRjY7Stj8b8PA1x1113YbFY+Pe//01BQUGt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ItK6eF1YjY2N5YUXXmDjxo1s2LCBsWPHcv3117Njxw5Pl0bfts6wuu/0PoorwuqBZditFkYnRgNaIEBERESkMXldWJ08eTKTJk2iZ8+eJCQk8PzzzxMSEsKaNWs8XRoxwTG08W9DmaOMfe26OTemrIWiHE1hJSIiItIEvC6sVlZeXs6CBQvIz89n+PDh1bYpLi4mJyenyqupGIZxdtxqyWmI6AqOMkj+L1ckRmOzGBzIyOdgRl6T1SAiIiLiS7wyrG7fvp2QkBD8/f25//77WbRoEX369Km27dy5cwkPD3e94uLimrS2PlFnZgTI3AE9rnRu3L+UsAA7w7pFAfCdeldFREREGoVXhtXExES2bNnC2rVr+dWvfsX06dPZuXNntW1nz55Ndna265WSktKktVWMW92RuQO6nwmrB5YCMKFfBwAWbT6KaWpWABERERF3eWVY9fPzo0ePHgwaNIi5c+fSv39//vznP1fb1t/f3zVzQMWrKfWLci67euD0AQrjhoDFBlnJkHmAyRfH4GezsDstlx3Hmm44goiIiIiv8Mqwei6Hw0FxcbGnywCgXVA72ga2pdwsZ1deCsQNc+44sIzwIDtXnXnQ6pNNqR6sUkRERKR18LqwOnv2bFauXElycjLbt29n9uzZLF++nDvuuMPTpQHOh6wGthsIwPq09dBjrHPHfudQgJsGdQLg8y3HKClzeKRGERERkdbC68Jqeno6d955J4mJiVx55ZWsX7+eb7/9lquuusrTpblc2uFSANalrTs7bjX5v1BWwqie0bQN8edUfgnL92j5VRERERF32DxdwLneeOMNT5dwQUM7DgVgS/oWiqMT8Q9qCwUnIWUttq6Xc8PAGOb/9xCfbEplfN8OHq5WREREpOXyup7VlqBLWBfaBbajxFHC1pPbofuZoQAHKoYCxAKwbHc6WfklnipTREREpMVTWG0AwzBcvatr09ZCj3HOHWfGrfbqEEbfmDBKy02+2HrMU2WKiIiItHgKqw00tIMzrK47vu5sz2raNshzjlO96RJn76pmBRARERFpOIXVBqroWU06mUS+fxB0uNi548APAFw/IAabxWBbajZ7T+R6qkwRERGRFk1htYE6hXSiU0gnyswyNp3YdHbp1TPjVqNC/BnTqx0An2xU76qIiIhIQyisuuHSjtVMYXVgGTic86tWDAVYtPkoZeWac1VERESkvhRW3VAxbnXt8bUQdyn4hUB+BpzYDsDYXu2ICLKTnlvMj/tPerJUERERkRZJYdUNFWF196ndZJcXQpfLnTv2fQeAn83Cdf1jAPhk01GP1CgiIiLSkimsuiE6KJpu4d0wMdmQtgESJzp37Pzc1aZiztVvd6SRXVjqiTJFREREWiyFVTe5hgKkrYXek8GwOqewyjwAwEWdwunZLoSSMgeLtx33ZKkiIiIiLY7CqptcD1kdXwdBkdBttHPHjkWAcwGBqWd6VxduSPFAhSIiIiItl8Kqmwa3H4yBwYHsA5wsPAl9b3DuOBNWwTkUwM9qYWvKaTYezvJQpSIiIiItj8Kqm9oEtKFXZC/gTO9qr2vAYoMTSZCxF4C2If5cP8D5oNWbqw55rFYRERGRlkZhtRG4ll5NqxgKMMa5Y+dnrjYzRnQF4JukNI6eLmz2GkVERERaIoXVRlCx9Ora42udG6oZCtAnJozLukdR7jB596fkZq5QREREpGVSWG0Eg9oPwmpYSc1L5WjeUeg1CSx2SN8J6btd7e4Z6exd/WDdEfKLyzxVroiIiEiLobDaCILtwfRr2w84M241MAJ6nFl+tdJQgDGJ7ejaNpjcojI+3pjqiVJFREREWhSF1UZSZdwqnB0KkPQpmCYAFovBjBFdAHhr1SEcDrO5yxQRERFpURRWG0nl+VZN03SuZmX1g5N7IH2Xq91Nl8QSFmAjObOAZbvTPVWuiIiISIugsNpI+kf3x8/iR3phOsk5yRAQDj3GOXdWetAq2N/GbUPjAU1jJSIiInIhCquNJMAWwIB2A4AaZgUwz/7K/87LumC1GPx0IJOdx3Kau1QRERGRFkNhtRENjxkOwIrUFc4NCRPA6g+Z++DEDle7Tm0CmdCvA+AcuyoiIiIi1XMrrKakpLBs2TIKCgpc2xwOB3/84x8ZMWIE48aNY/HixW4X2VKMiXMuBrD2+FryS/MhIAx6XuXcWWkoAJydxurzLcfIyC1u1jpFREREWgq3wuqTTz7JtGnTsNvtrm3PP/88s2fPZvXq1SxbtowpU6awfv16twttCbqFd6NzWGdKHaX8ePRH58YahgJcEh/BgLg2lJQ7eG/NYQ9UKyIiIuL93Aqrq1atYty4ca6wapomr776Kr169eLIkSOsW7eO4OBgXnrppUYp1tsZhsHYuLEA/JDyg3NjwgSwBcCpA5C2rUr7it7V99YcprCkvFlrFREREWkJ3Aqr6enpdO7c2fX9li1byMjI4MEHHyQ2NpbBgwf7VM8qwJh451CAlSkrKXWUgn8I9Bzv3HnOUIAJ/ToQGxFIZn4J769V76qIiIjIudwKqw6HA4fD4fp++fLlzt7FsWNd2zp16kRaWpo7p2lRLm57MZEBkeSW5rIhbYNzY8VQgG0fgeNsD6rdauHXY3sCMG/5AQpKtASriIiISGVuhdX4+HjWrVvn+v6zzz6jY8eOJCYmuralpaXRpk0bd07TolgtVteDVq6hAImTnEuw5qTCgWVV2t9wSSfiI4PIzC/h3dXqXRURERGpzK2wetNNN7Fq1SqmTp3Kz372M3788UduuummKm127txJt27d3CqypakIq8uOLHOuZmUPgItvde7c+HaVtnarhV9f6exd/fuKA+QVq3dVREREpIJbYfWxxx5jyJAhfPrpp3zwwQdcdNFFPP300679hw8fZt26dYwePdrNMluWSzteSqAtkBMFJ9h5aqdz46Dpzj/3LIHcqsMipgyIoWvbYLIKSnnnp+TmLVZERETEi7kVVsPCwlizZg3btm1j27ZtbNy4kYiIiCptPv30Ux544AG3imxpAmwBjOw0EoAfjpwZCtCuN8QOBbMctrxfpb3NauGhM72r/1h5kJyi0matV0RERMRbNcoKVv369aNfv35YrdYq2zt37sz1119Pp06dGuM0LYprKEBKpTGqFb2rm96FSg+mAUzuH0P36GCyC0t568fkZqpSRERExLu5FVZzc3M5ePAgpaVVewIXLlzIHXfcwb333svmzZvdKrClGhU7CqthZV/WPlJyU5wb+94A/mGQlQzJK6u0t1oMHh6XAMA/fzxIdoF6V0VERETcCquPP/44/fv3rxJW582bx+23386HH37Im2++yciRI9m9e7fbhbY04f7hDGo/CKg0FMAvGC6a5vx64zvnveeaizqS0D6E3KIy3vjxYHOVKiIiIuK13AqrK1asYNy4cQQFBbm2vfDCC3Tq1ImVK1fy73//G9M0fWYFq3ONjXfON1vtUIDdX0F+ZpX2FovBb870rr65Kpms/JJmqVNERETEW7kVVo8fP07Xrl1d3+/atYuUlBR+/etfM3LkSKZOncp1113HypUrazlK61UxbnVz+mayirKcGzv2h44DoLwEtn543nuu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",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/tx/pqtg9xkd5156pd7hbgdr_4140000gn/T/ipykernel_76291/2506035394.py:23: UserWarning: Matplotlib is currently using module://matplotlib_inline.backend_inline, which is a non-GUI backend, so cannot show the figure.\n",
      "  fig.show()\n"
     ]
    }
   ],
   "source": [
    "import matplotlib\n",
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def plot_focal_loss():\n",
    "    fig = plt.figure(figsize=(8, 6))\n",
    "    ax = fig.gca()\n",
    "    x = torch.linspace(start=0, end=1, steps=100)\n",
    "    y_0 = [focal_loss(torch.tensor([x_el]), torch.tensor([1]), gamma=0) for x_el in x] \n",
    "    y_1 = [focal_loss(torch.tensor([x_el]), torch.tensor([1]), gamma=1) for x_el in x] \n",
    "    y_2 = [focal_loss(torch.tensor([x_el]), torch.tensor([1]), gamma=2) for x_el in x] \n",
    "    ax.plot(x.squeeze(), y_0, label=r\"$\\gamma$=0\")\n",
    "    ax.plot(x.squeeze(), y_1, label=r\"$\\gamma$=1\")\n",
    "    ax.plot(x.squeeze(), y_2, label=r\"$\\gamma$=2\")\n",
    "    ax.set_xlim(0, 1)\n",
    "    ax.set_xticks(torch.arange(0, 10) / 10.)\n",
    "    ax.set_ylim(0, 5)\n",
    "    ax.set_xlabel(\"Probability of ground truth class\", fontsize=14)\n",
    "    ax.set_ylabel(\"Loss\", fontsize=14)\n",
    "    plt.title(r\"Focal loss for various values of $\\gamma$\", fontsize=16)\n",
    "    ax.legend()\n",
    "    plt.show()\n",
    "    fig.show()\n",
    "\n",
    "plot_focal_loss()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
